package com.csl.testjetpack.ui

import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.navArgs
import com.csl.testjetpack.BR
import com.csl.testjetpack.R
import com.csl.testjetpack.data.bean.RemoteButtonInfo
import com.csl.testjetpack.data.bean.RemoteInfo
import com.csl.testjetpack.data.db.RemoteDatabase
import com.csl.testjetpack.databinding.ActivityMainBinding
import com.csl.testjetpack.databinding.FragmentRemotebtnBinding
import com.csl.testjetpack.databinding.FragmentRemoteinfoBinding
import com.csl.testjetpack.databinding.FragmentTestBinding
import com.csl.testjetpack.vm.RemoteModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

/**
 * A simple [Fragment] subclass.
 * Use the [TestFragment.newInstance] factory method to
 * create an instance of this fragment.
 */
class RemoteFragment : Fragment() {

    private var param1: String? = null
    private var param2: String? = null
    private val args: RemoteFragmentArgs by navArgs()
    var binding: FragmentRemoteinfoBinding? = null

//    val viewModel: RemoteModel by RemoteModel(activity.application!!)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
//        arguments?.let {
//            param1 = it.getString(ARG_PARAM1)
//            param2 = it.getString(ARG_PARAM2)
//        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
//        var bind:FragmentRemoteinfoBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_remoteinfo, container, false)
//        binding = FragmentRemoteinfoBinding.inflate(inflater)

        //activity
//        binding = DataBindingUtil.setContentView(this, R.layout.fragment_remoteinfo)

        //fragment
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_remoteinfo, container, false)
        binding!!.buttonInfo = RemoteButtonInfo("测试", "这是测试的按钮")

        lifecycleScope.launchWhenResumed {
            for( i in 0..5) {
                delay(5000)
                binding!!.buttonInfo?.apply {
                    name = "按钮$i"
                    notifyPropertyChanged(BR.name)
                }
            }
        }

        return binding!!.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

    }



    override fun onDestroy() {
        super.onDestroy()
        binding = null
    }

    companion object {
        /**
         * Use this factory method to create a new instance of
         * this fragment using the provided parameters.
         *
         * @param param1 Parameter 1.
         * @param param2 Parameter 2.
         * @return A new instance of fragment TestFragment.
         */
        // TODO: Rename and change types and number of parameters
        @JvmStatic
        fun newInstance(param1: String, param2: String) =
            TestFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                }
            }
    }
}